package com.hk.redundantcode.templatemethod.right;

import com.hk.redundantcode.templatemethod.Item;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

/**
 * @author: dpb
 * @Description 普通车
 * @date: 2023/2/1 23:08
 * @Version 1.0
 */
@Service
public class NormalUserCart extends AbstractCart{

    @Override
    protected void processCouponPrice(long userId, Item item) {
        item.setDeliveryPrice(item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()).multiply(new BigDecimal("0.1"))));
    }

    @Override
    protected void processDeliveryPrice(long userId, Item item) {
        item.setCouponPrice(BigDecimal.ZERO);
    }

//    public Cart process(long userId, Map<Long, Integer> items) {
//        Cart cart = new Cart();
//
//        //把Map的购物车转换为Item列表
//        List<Item> itemList = new ArrayList<>();
//        items.entrySet().stream().forEach(entry -> {
//            Item item = new Item();
//            item.setId(entry.getKey());
//            item.setPrice(Db.getItemPrice(entry.getKey()));
//            item.setQuantity(entry.getValue());
//            itemList.add(item);
//        });
//        cart.setItems(itemList);
//
//        //处理运费和商品优惠
//        itemList.stream().forEach(item -> {
//            //运费为商品总价的10%
//            item.setDeliveryPrice(item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()).multiply(new BigDecimal("0.1"))));
//            //无优惠
//            item.setCouponPrice(BigDecimal.ZERO);
//        });
//
//        //计算纯商品总价
//        cart.setTotalItemPrice(cart.getItems().stream().map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))).reduce(BigDecimal.ZERO,BigDecimal::add));
//        ///计算运费总价
//        cart.setTotalDeliveryPrice(cart.getItems().stream().map(Item::getDeliveryPrice).reduce(BigDecimal.ZERO,BigDecimal::add));
//        //计算总优惠
//        cart.setTotalDiscount(cart.getItems().stream().map(Item::getCouponPrice).reduce(BigDecimal.ZERO,BigDecimal::add));
//        //应付总价=商品总价+运费总价-总优惠
//        cart.setPayPrice(cart.getTotalItemPrice().add(cart.getTotalDeliveryPrice()).subtract(cart.getTotalDiscount()));
//        return cart;
//    }

}
